package com.pe.pgn.clubpgn.dao.impl;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.dao.AnulacionReservaDao;
import com.pe.pgn.clubpgn.dao.hibernate.GenericDaoHibernate;
import com.pe.pgn.clubpgn.domain.ClpbAlmacen;
import com.pe.pgn.clubpgn.domain.ClpbDocumentoMovArticulo;
import com.pe.pgn.clubpgn.domain.ClpdArticulo;
import com.pe.pgn.clubpgn.domain.ClpmCatalogo;
import com.pe.pgn.clubpgn.domain.ClpmTransaccionArticulo;
import com.pe.pgn.clubpgn.domain.ClprPremioCatalogo;
import com.pe.pgn.clubpgn.domain.beans.BNAlmacen;
import com.pe.pgn.clubpgn.domain.beans.BNArticulo;
import com.pe.pgn.clubpgn.domain.beans.BNClientesPersona;
import com.pe.pgn.clubpgn.domain.beans.BNDocumentoDetalle;
import com.pe.pgn.clubpgn.domain.beans.BNDocumentoMovArticulo;

@Repository("anulacionReservaDao")
public class AnulacionReservaDaoImpl extends GenericDaoHibernate<ClpbDocumentoMovArticulo, Long> implements AnulacionReservaDao{
	
	private JdbcTemplate jdbcTemplate;
	
	@Autowired
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	
	public AnulacionReservaDaoImpl() {
		super(ClpbDocumentoMovArticulo.class);
	}	
	
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public Map guardarAnulacionReserv(BNDocumentoMovArticulo bndocumento) {
		
		Map map = new HashMap();
		//se inicia la transaccion para guardar todo el bloque

		try{
			
			String codTarjeta  	  = bndocumento.getCodTarjeta();
			String codAlmacen 	  = bndocumento.getCoAlmacen();
			String coCodigoPremio = bndocumento.getCoCodigoPremio();
			Long vaCantidad 	  = bndocumento.getVaCantidad();
			Long vaPuntosTotales  = bndocumento.getVaPuntosTotales();			
			
			BNArticulo bnarticulo = obtenerDatosPremioPorCodigo(coCodigoPremio,codAlmacen);
			BNClientesPersona beancliente = obtenerDatosClientePorTarjeta(codTarjeta);
			
			String[] arrayStr = new String[5];		
			ClpbAlmacen clpbAlmacen = new ClpbAlmacen();
			ClpdArticulo clpdArticulo = new ClpdArticulo();
			ClpmCatalogo clpmCatalogo = new ClpmCatalogo();
			ClprPremioCatalogo clprPremio = new ClprPremioCatalogo();
			ClpbDocumentoMovArticulo clpbBean = new ClpbDocumentoMovArticulo();
					
			//UPDATE DOCUMENTO
			StringBuffer query = new StringBuffer();
			query.append(" update clpb_documento_mov_articulo ");
			query.append(" set ");
			query.append(" 		st_documento_mov_articulo = 'N',");
			query.append(" 		co_usuario_modificador = '").append(getUsuarioLogueado().getUsername()).append("',");
			query.append("		da_fecha_modificacion = sysdate ");
			query.append(" where id = ").append(bndocumento.getId());
			arrayStr[0] = query.toString();
			
			//UPDATES ACTUALIZANDO STOCK DE ARTICULO
			query = new StringBuffer();
			query.append(" update clpd_articulo ");
			query.append(" set ");
			query.append(" 		va_stock_actual = decode(va_stock_actual,null,"+vaCantidad+",va_stock_actual + "+vaCantidad+"),");
			query.append(" 		co_usuario_modificador = '").append(getUsuarioLogueado().getUsername()).append("',");
			query.append("		da_fecha_modificacion = sysdate ");			
			query.append(" where id = ").append(bnarticulo.getCoArticulo());
			arrayStr[1] = query.toString();
			
			//UPDATE PREMIO CATALOGO
			query = new StringBuffer();
			query.append(" update clpr_premio_catalogo ");
			query.append(" set ");
			query.append(" 		va_canjes_limite_espejo  = decode(va_canjes_limite_espejo,null,"+vaCantidad+",va_canjes_limite_espejo + "+vaCantidad+"),");
			query.append(" 		va_stock_catalogo_espejo = decode(va_stock_catalogo_espejo,null,"+vaCantidad+",va_stock_catalogo_espejo + "+vaCantidad+"),");
			query.append(" 		co_usuario_modificador = '").append(getUsuarioLogueado().getUsername()).append("',");
			query.append("		da_fecha_modificacion = sysdate ");
			query.append(" where id = ").append(bnarticulo.getCoPremio());
			arrayStr[2] = query.toString();			
			
			//UPDATE CLIENTE PUNTOS
			query = new StringBuffer();
			query.append(" update clpm_puntos_periodo_cliente ");
			query.append(" set ");
			query.append(" 		va_puntos_totales = va_puntos_totales + ").append(vaPuntosTotales).append(",");
			query.append(" 		va_puntos_actuales = va_puntos_actuales + ").append(vaPuntosTotales).append(",");
			query.append(" 		co_usuario_modificador = '").append(getUsuarioLogueado().getUsername()).append("',");
			query.append("		da_fecha_modificacion = sysdate ");
			query.append(" where co_cliente_persona = ").append(beancliente.getCoClientePersona());
			arrayStr[3] = query.toString();			
			
			//UPDATE STOCK ALMACEN CATALOGO
			query = new StringBuffer();
			query.append(" update clpm_stock_almacen_catalogo ");
			query.append(" set ");
							
			if(CLPConstantes.ST_FALSO.equalsIgnoreCase(bnarticulo.getStManejaStockPuntoCanje()))
			query.append(" 		va_comprometido = decode(va_comprometido,null,"+(-vaCantidad)+",va_comprometido - "+vaCantidad+"),");
			query.append(" 		va_cantidad = decode(va_cantidad,null,"+vaCantidad+",va_cantidad + "+vaCantidad+"),");
			query.append(" 		va_stock_catalogo_espejo = decode(va_stock_catalogo_espejo,null,"+vaCantidad+",va_stock_catalogo_espejo + "+vaCantidad+"),");
			query.append(" 		co_usuario_modificador = '").append(getUsuarioLogueado().getUsername()).append("',");
			query.append("		da_fecha_modificacion = sysdate ");
			query.append(" where id = ").append(bnarticulo.getCoStockAlmacenCatalogo());
			arrayStr[4] = query.toString();			
			
			clpdArticulo.setId(Long.parseLong(bnarticulo.getCoArticulo()));
			clpbAlmacen.setId(Long.parseLong(codAlmacen));
			clpmCatalogo.setId(Long.parseLong(bnarticulo.getCoCatalogo()));
			clprPremio.setId(Long.parseLong(bnarticulo.getCoPremio()));
			clpbBean.setId(bndocumento.getId());			
			
			for (Iterator<BNDocumentoDetalle> iter = bndocumento.getDocumentoDetalle().iterator(); iter.hasNext(); ) {
				BNDocumentoDetalle documentoDetalle = iter.next();
				
				ClpmTransaccionArticulo clpmTransaccion = new ClpmTransaccionArticulo();
				clpmTransaccion.setClpdArticulo(clpdArticulo);
				clpmTransaccion.setCoCodigoArticulo(bnarticulo.getCoCodigoArticulo());
				clpmTransaccion.setStIndicadorTipoMovimiento(CLPConstantes.ANULACION_DE_RESERVA_DE_PREMIO);
				clpmTransaccion.setVaCantidad(new BigDecimal(1));
				clpmTransaccion.setClpbAlmacen(clpbAlmacen);
				clpmTransaccion.setClpmCatalogo(clpmCatalogo);
				clpmTransaccion.setClprPremio(clprPremio);
				clpmTransaccion.setCoCodigoPremio(coCodigoPremio);
				clpmTransaccion.setClpbDocumentoMovArticulo(clpbBean);
				clpmTransaccion.setCoUsuarioCreador(getUsuarioLogueado().getUsername());
				clpmTransaccion.setDaFechaCreacion(Calendar.getInstance());
				clpmTransaccion.setCoSerie(documentoDetalle.getCoSerie());
				getHibernateTemplate().saveOrUpdate(clpmTransaccion);
				
			}				

			getHibernateTemplate().flush();
			jdbcTemplate.batchUpdate(arrayStr);
			
			for (int i = 0; i < arrayStr.length; i++) {
				log.info(i+"* update detalle guardarAnulacionReserv(): "+arrayStr[i]);
			}
			
			map.put("msg", "success");
			
		}catch(Exception e){
			
			getHibernateTemplate().clear();
			map.put("msg", "error");
			
			log.info(e.getMessage());
		}		
		return (HashMap)map;
	}

	@SuppressWarnings("unchecked")
	public BNArticulo obtenerDatosPremioPorCodigo(String codePremio, String coAlmacen) {
		
		StringBuffer query = new StringBuffer();
		query.append(" select ");
		query.append(" 		pc.va_stock_catalogo		as vaStockCatalogoPremioCat, ");
		query.append(" 		pc.va_stock_catalogo_espejo	as vaStockCatalogoEspejoPremioCat, ");		
		query.append(" 		pc.va_canjes_limite			as vaCanjesLimite, ");
		query.append(" 		pc.va_canjes_limite_espejo	as vaCanjesLimiteEspejo, ");
		query.append(" 		pa.va_stock_actual			as vaStockActual, ");
		query.append(" 		pa.va_stock_disponible		as vaStockDisponible, ");
		query.append(" 		pc.id						as coPremio, ");
		query.append(" 		pa.id						as coArticulo, ");
		query.append(" 		pa.de_articulo				as deArticulo, ");
		query.append(" 		pc.co_catalogo				as coCatalogo, ");
		query.append(" 		cat.de_catalogo				as deCatalogo, ");
		query.append(" 		pc.co_codigo_premio			as coCodigoPremio, ");
		query.append(" 		pa.co_codigo_articulo		as coCodigoArticulo, ");
		query.append(" 		ca.de_categoria				as deCategoria, ");
		query.append(" 		dm.de_unidad_medida			as deUnidadMedida, ");
		query.append(" 		pc.va_puntos_requeridos		as vaPuntosRequeridos, ");
		query.append(" 		pc.va_monto_requerido		as vaMontoRequerido, ");
		query.append(" 		pa.st_maneja_serie			as stManejaSerie, ");
		query.append(" 		pa.st_maneja_stock_punto_canje		as stManejaStockPuntoCanje, ");
		query.append(" 		pa.st_maneja_stock_alm_principal	as stManejaStockAlmPrincipal, ");
		query.append(" 		pa.st_no_maneja_stock				as stNoManejaStock, ");
		query.append(" 		sac.id								as coStockAlmacenCatalogo, ");
		query.append(" 		sac.va_cantidad						as vaStockCatalogo, ");
		query.append(" 		sac.va_stock_catalogo				as vaStockCatalogoPremio, ");
		query.append(" 		sac.va_stock_catalogo_espejo		as vaStockCatalogoEspejoPremio, ");
		query.append(" 		sac.va_comprometido					as vaComprometido, ");
		query.append(" 		sac.co_almacen						as coAlmacen, ");
		query.append(" 		alm.st_es_almacen_principal			as stEsAlmacenPrincipal, ");
		query.append(" 		alm.st_es_almacen_virtual			as stEsAlmacenVirtual ");
		
		query.append(" from clpr_premio_catalogo pc ");
		query.append(" inner join clpd_articulo pa ");
		query.append(" 		on pa.id = pc.co_premio ");
		query.append(" inner join clpm_catalogo cat ");
		query.append(" 		on cat.id = pc.co_catalogo ");
		query.append(" inner join clpb_categoria ca ");
		query.append(" 		on ca.id = pa.co_categoria ");
		query.append(" inner join clpd_unidad_medida dm ");
		query.append(" 		on dm.id = pa.co_unidad_medida ");
		query.append(" inner join clpm_stock_almacen_catalogo sac ");
		query.append(" 		on  sac.co_premio = pc.id ");
		query.append(" 		and sac.co_catalogo = pc.co_catalogo ");
		query.append(" inner join clpb_almacen alm ");
		query.append(" 		on alm.id = sac.co_almacen ");
		
		query.append(" where 1 = 1 ");
		query.append(" 		and pc.co_codigo_premio   = '").append(codePremio).append("'");
		query.append(" 		and pc.st_premio_catalogo = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" 		and pa.st_articulo 		  = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" 		and ca.st_categoria 	  = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" 		and dm.st_unidad_medida   = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" 		and cat.st_catalogo		  = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" 		and alm.st_almacen		  = '").append(CLPConstantes.ST_VERDADERO).append("'");
		
		//validando catalogos vigentes
		query.append(" and (to_date(to_char(cat.da_inicio_vigencia, 'dd/MM/yyyy'),'dd/MM/yyyy') " +
        "<= to_date(to_char(sysdate, 'dd/MM/yyyy'),'dd/MM/yyyy') ");
		query.append(" and to_date(to_char(cat.da_fin_canje, 'dd/MM/yyyy'),'dd/MM/yyyy') " +
        ">= to_date(to_char(sysdate, 'dd/MM/yyyy'),'dd/MM/yyyy')) ");
		
		query.append(" group by ");
		query.append(" 		pc.va_stock_catalogo, ");
		query.append(" 		pc.va_stock_catalogo_espejo, ");	
		query.append(" 		pc.va_canjes_limite	, ");
		query.append(" 		pc.va_canjes_limite_espejo, ");
		query.append(" 		pa.va_stock_actual, ");
		query.append(" 		pa.va_stock_disponible, ");
		query.append(" 		pc.id, ");
		query.append(" 		pa.id, ");
		query.append(" 		pa.de_articulo, ");
		query.append(" 		pc.co_catalogo, ");
		query.append(" 		cat.de_catalogo	, ");
		query.append(" 		pc.co_codigo_premio, ");
		query.append(" 		pa.co_codigo_articulo, ");
		query.append(" 		ca.de_categoria	, ");
		query.append(" 		dm.de_unidad_medida, ");
		query.append(" 		pc.va_puntos_requeridos	, ");
		query.append(" 		pc.va_monto_requerido, ");
		query.append(" 		pa.st_maneja_serie	, ");
		query.append(" 		pa.st_maneja_stock_punto_canje, ");
		query.append(" 		pa.st_maneja_stock_alm_principal, ");
		query.append(" 		pa.st_no_maneja_stock, ");
		query.append(" 		sac.id	, ");
		query.append(" 		sac.va_cantidad	, ");
		query.append(" 		sac.va_stock_catalogo, ");
		query.append(" 		sac.va_stock_catalogo_espejo, ");
		query.append(" 		sac.va_comprometido, ");
		query.append(" 		sac.co_almacen, ");
		query.append(" 		alm.st_es_almacen_principal, ");
		query.append(" 		alm.st_es_almacen_virtual ");
		
		log.info("**** CanjeDaoImpl.obtenerDatosPremioPorCodigo() --> "+query.toString());
		List<BNArticulo> list = findListOfBeans(query.toString(), null, BNArticulo.class);
		if(!list.isEmpty()){			
			for (BNArticulo bnarticulo2 : list) {					
				if(bnarticulo2.getStManejaStockAlmPrincipal().equals(CLPConstantes.ST_VERDADERO) &&
				   bnarticulo2.getStEsAlmacenPrincipal().equals(CLPConstantes.ST_VERDADERO)){						
					return bnarticulo2;					
				}else if(bnarticulo2.getStManejaStockPuntoCanje().equals(CLPConstantes.ST_VERDADERO) && 
						 bnarticulo2.getCoAlmacen().equals(coAlmacen)){
					return bnarticulo2;
				}else if(bnarticulo2.getStNoManejaStock().equals(CLPConstantes.ST_VERDADERO) &&
					bnarticulo2.getStEsAlmacenVirtual().equals(CLPConstantes.ST_VERDADERO)){
					return bnarticulo2;
				}								
			}							
		}
		
		return new BNArticulo();
	}

	@SuppressWarnings("unchecked")
	public BNDocumentoMovArticulo obtenerDocumentoReserva(Long id) {
		StringBuffer query = new StringBuffer();
		query.append(" select ");
		query.append(" dma.id, ");
		query.append(" cp.de_nombre||' '|| cp.de_ape_paterno||' '||cp.de_ape_materno as deCliente, ");
		query.append(" to_char(cast(dma.da_fecha_documento  as date), '"+CLPConstantes.DATE_PATTERN+"') as daFechaDocumento, ");
		query.append(" cptos.va_puntos_actuales 		as dePuntosAcumulados,  ");	
		query.append(" dma.co_almacen 					as coAlmacen, ");
		query.append(" alm.de_almacen 					as deAlmacen, ");
		query.append(" dma.st_documento_mov_articulo	as stDocumentoMovArt, ");
		query.append(" dma.de_observaciones				as deObservacion, ");
		query.append(" dma.co_cod_tarjeta_persona_canje	as codTarjeta, ");
		query.append(" dma.nu_serie						as nuSerie, ");
		query.append(" dma.nu_documento					as nuDocumento, ");
		query.append(" dma.va_cantidad					as vaCantidad, ");
		query.append(" dma.va_puntos_premio				as vaPuntosPremio, ");
		query.append(" dma.va_puntos_totales			as vaPuntosTotales, ");
		query.append(" dma.va_precio_premio				as vaPrecioPremio, ");
		query.append(" dma.va_precio_total				as vaPrecioTotal, ");
		query.append(" dma.st_direccion					as stDireccion, ");
		query.append(" dma.st_almacen_principal			as stAlmacenPrincipal, ");
		query.append(" dma.st_punto_canje				as stPuntoCanje, ");
		query.append(" dma.de_jr_av_ca					as deJrAvCa, ");
		query.append(" dma.de_direccion					as deDireccion, ");
		query.append(" dma.de_numero					as deNumero, ");
		query.append(" dma.de_mz_lote					as deMzLote, ");
		query.append(" dma.de_dpto_piso_int				as deDptoPisoInt, ");
		query.append(" dma.de_urb_ind_res_un_vec		as deUrbIndResUnVec, ");
		query.append(" dma.de_sec_etapa_zona			as deSecEtapaZona, ");
		query.append(" ub.co_departamento				as coDepartamento, ");
		query.append(" ub.de_departamento				as deDepartamento, ");
		query.append(" ub.co_distrito					as coDistrito, ");
		query.append(" ub.de_distrito					as deDistrito, ");
		query.append(" ub.co_provincia					as coProvincia, ");
		query.append(" ub.de_provincia 					as deProvincia ,");
		query.append(" dma.co_premio					as coPremio 	");
		
		query.append(" from clpb_documento_mov_articulo dma  ");
		query.append(" inner join clpb_almacen alm  ");
		query.append(" 		on alm.id = dma.co_almacen ");
		query.append(" inner join clpb_tarjeta_persona trj  ");
		query.append(" 		on trj.co_codigo_tarjeta_persona = dma.co_cod_tarjeta_persona_canje ");
		query.append(" inner join clpb_cliente_persona cp  ");
		query.append(" 		on cp.id = trj.co_cliente_persona ");
		query.append(" left join clpm_puntos_periodo_cliente cptos ");
		query.append(" 		on cptos.co_cliente_persona = trj.co_cliente_persona ");	
		query.append(" left join clpm_ubigeo ub  ");
		query.append(" 		on ub.id = dma.co_ubigeo ");
		//query.append(" inner join clpr_periodo_acumulacion cpa ");
		//query.append(" 		on  cpa.id =cptos.co_periodo_acumulacion ");
		query.append(" where 1 = 1 ");
		query.append(" 	and dma.id = ").append(id);		
		query.append(" 	and dma.st_documento_mov_articulo = '").append(CLPConstantes.ST_VERDADERO).append("'");
		//query.append(" 	and cpa.da_fecha_inicio<=sysdate ");
		//query.append(" 	and cpa.da_fecha_vencimiento_puntos>=sysdate ");
		//query.append(" 	and cpa.da_fecha_inicio<=cptos.da_fecha_creacion  ");
		//query.append(" 	and cpa.da_fecha_vencimiento_puntos>= cptos.da_fecha_creacion ");
		System.out.println("*************** obteniendo BASE: "+query.toString());
		List<BNDocumentoMovArticulo> list = findListOfBeans(query.toString(), null, BNDocumentoMovArticulo.class);
		if(!list.isEmpty()){
			
			BNDocumentoMovArticulo bndocumento = 
			(BNDocumentoMovArticulo)list.get(0);
			
			query = new StringBuffer();
			query.append(" select ");
			query.append(" 		cpc.co_codigo_premio as coCodigoPremio, ");
			query.append(" 		art.de_articulo 	 as deCodigoPremio, ");
			query.append(" 		dta.co_articulo		 as coArticulo, 	");
			query.append(" 		dta.co_premio		 as coPremio, 		");
			query.append(" 		dta.co_serie 		 as coSerie			");
			query.append(" from clpd_documento_mov_articulo dta  		");
			query.append(" inner join clpr_premio_catalogo cpc  		");
			query.append(" 		on  cpc.id = dta.co_premio");
			query.append(" 		and cpc.co_premio = dta.co_articulo");
			query.append(" inner join clpd_articulo art ");
			query.append(" 		on  art.id = dta.co_articulo");
			query.append(" where 1 = 1 ");
			query.append(" 	and dta.co_documento_mov_articulo = ").append(id);
			query.append(" 	and dta.st_documento_mov_articulo = '").append(CLPConstantes.ST_VERDADERO).append("'");
			
			System.out.println("*************** obteniendo DETALLE: "+query.toString());
			List<BNDocumentoDetalle> listDetalle = findListOfBeans
			(query.toString(), null, BNDocumentoDetalle.class);	
			
			if(!listDetalle.isEmpty()){
				
				BNDocumentoDetalle bndocumentodetalle = 
				(BNDocumentoDetalle)listDetalle.get(0);
				
				bndocumento.setStOperacion(CLPConstantes.ST_DOCUMENTO_CANJE);
				bndocumento.setCoCodigoPremio(bndocumentodetalle.getCoCodigoPremio());
				bndocumento.setDeCodigoPremio(bndocumentodetalle.getDeCodigoPremio());
				bndocumento.setDocumentoDetalle(listDetalle);
				
			}else{
				bndocumento.setStOperacion(CLPConstantes.ST_DOCUMENTO_RESERVA);				
			}
			
			return bndocumento;
		}
		
		return new BNDocumentoMovArticulo();
	}
	
	@SuppressWarnings("rawtypes")
	public BNClientesPersona obtenerDatosClientePorTarjeta(String codeTarjeta) {

		StringBuffer query = new StringBuffer();
		query.append(" select ");
		query.append(" cp.de_nombre||' '|| cp.de_ape_paterno||' '||cp.de_ape_materno as deNombre, ");
		query.append(" cptos.va_puntos_actuales as dePuntosAcumulados,  ");
		query.append(" tp.co_cliente_persona as coClientePersona  ");
		query.append(" from clpb_tarjeta_persona tp ");
		query.append(" inner join clpb_cliente_persona cp ");
		query.append(" 		on cp.id = tp.co_cliente_persona ");
		query.append(" left join clpm_puntos_periodo_cliente  cptos ");
		query.append(" 		on cptos.co_cliente_persona = tp.co_cliente_persona ");
		query.append(" inner join clpr_periodo_acumulacion cpa ");
		query.append(" 		on  cpa.id =cptos.co_periodo_acumulacion ");
		query.append(" where 1 = 1 ");
		query.append(" 		and trim(tp.co_codigo_tarjeta_persona) = '").append(codeTarjeta.trim()).append("'");
		query.append(" 		and cpa.da_fecha_inicio<=sysdate ");
		query.append(" 		and cpa.da_fecha_vencimiento_puntos>=sysdate ");
		query.append(" 		and cpa.da_fecha_inicio<=cptos.da_fecha_creacion  ");
		query.append(" 		and cpa.da_fecha_vencimiento_puntos>= cptos.da_fecha_creacion ");
		query.append(" 		and cp.st_cliente_persona = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" 		and tp.st_tarjeta_persona = '").append(CLPConstantes.ST_VERDADERO).append("'");
		
		List list = findListOfBeans(query.toString(), null, BNClientesPersona.class);
		if(!list.isEmpty()){
			return (BNClientesPersona)list.get(0);
		}
		
		return new BNClientesPersona();
	}
	
	@SuppressWarnings("rawtypes")
	public BNAlmacen obtenerAlmacenPorEstacion(Long idEstacion) {

		StringBuffer query = new StringBuffer();
		query.append(" select ");
		query.append(" 	 id ");
		query.append(" 	,de_almacen as deAlmacen ");
		query.append(" from clpb_almacen ");
		query.append(" where st_almacen = '").append(CLPConstantes.ST_VERDADERO).append("'");
		query.append(" and co_estacion = ").append(idEstacion);
		
		List list = findListOfBeans(query.toString(), null, BNAlmacen.class);
		if(!list.isEmpty()){
			return (BNAlmacen)list.get(0);
		}
		
		return null;
	}
}
